#!/bin/bash

# 设置工作目录和输出目录
workdir=/media/gm/新加卷/CCNP-20241104
BIDS_DIR=${workdir}/bids
sub_list=${workdir}/nifti/subs.list
LOG_FILE=~/Desktop/log/conversion_bids.log

# 检查并创建日志目录
mkdir -p "$(dirname "$LOG_FILE")"

# 检查被试列表文件是否存在
if [ ! -f "$sub_list" ]; then
    echo "错误：未找到被试列表文件 '$sub_list'。" | tee -a "$LOG_FILE"
    exit 1
fi

# 记录日志，保存到日志文件
exec > >(tee -a "$LOG_FILE") 2>&1

# 读取被试列表到数组，过滤掉空行和注释行
mapfile -t subjects < <(grep -vE '^\s*#|^\s*$' "$sub_list")

# 导出环境变量以便子进程访问
export BIDS_DIR
export workdir

# 并行化转换，每个被试数据同时进行转换
parallel -j 4 '
    subj_data=${workdir}/nifti/{}

    # 使用 awk 提取被试编号和试次，匹配大写和小写的 W
    clean_subj_id=$(echo {} | awk -F"_" '\''{print $4}'\'')
    trial_number=$(echo {} | awk -F"_" '\''{print substr($NF, 2)}'\'')
    session_id="ses-0${trial_number}"  # 使用试次作为会话 ID

    if [[ -z "$clean_subj_id" || -z "$trial_number" ]]; then
        echo "错误：无法从文件名 {} 中提取被试编号和试次。"
        exit 1
    fi

    echo "正在将 ${subj_data} 转换为 BIDS 格式，参与者 ID 为 ${clean_subj_id}，会话 ID 为 ${session_id}"

    # 使用 dcm2bids 进行转换
    if dcm2bids -d "${subj_data}" \
                -c "${workdir}/dcm2bids_config.json" \
                -p "CCNPIBP0${clean_subj_id}" \
                -s "${session_id}" \
                -o "${BIDS_DIR}" --skip_dcm2niix; then
        echo "被试 ${clean_subj_id} 的转换已成功完成。"
    else
        echo "错误：被试 ${clean_subj_id} 的转换失败。" >&2
    fi
' ::: "${subjects[@]}"

echo "所有被试的转换已完成！"
